package com.yanggu.scala.chapater12.caseclass

object CaseDemo02 {

  def main(args: Array[String]): Unit = {
    //现在有一些商品，请使用Scala设计相关的样例类，完成商品可以捆绑打折出售。要求
    //商品捆绑可以是单个商品，也可以是多个商品。
    //打折时按照折扣xx元进行设计.
    //能够统计出所有捆绑商品打折后的最终价格
    val sale = Bundle("书籍", 10, Book("漫画", 40), Bundle("文学作品", 20, Book("《阳关》", 80), Book("《围城》", 30)))
    println(price(sale))
  }

  def price(it: Item): Double = {
    it match {
      case Book(_, p) => p
      //生成一个新的集合,_是将its中每个循环的元素传递到price中it中。递归操作,分析一个简单的流程
      case Bundle(_, disc, its @ _*) => its.map(price).sum - disc
    }
  }

}

abstract class Item // 项

case class Book(description: String, price: Double) extends Item

//Bundle 捆 ， discount: Double 折扣 ， item: Item* , Item*表示可变参数
case class Bundle(description: String, discount: Double, item: Item*) extends Item

//给出案例表示有一捆数，单本漫画（40-10） + 文学作品(两本书)（80+30-20） = 30 + 90 = 120.0
//val sale = Bundle("书籍", 10,  Book("漫画", 40), Bundle("文学作品", 20, Book("《阳关》", 80), Book("《围城》", 30)))
